export function cssStrToObj(cssString: string) {
  var cssObject = {};
  var declarations = cssString.split(';');
  declarations.forEach(function (declaration) {
    var parts = declaration.split(':');
    if (parts.length === 2) {
      var propertyName = parts[0].trim();
      var propertyValue = parts[1].trim();
      cssObject[propertyName] = propertyValue;
    }
  });
  return cssObject;
}

export function linearScroll(element, targetX, duration) {
  // 获取当前时间
  const startTime = performance.now();
  // 获取起始滚动位置
  const startX = element.scrollLeft;
  // 计算滚动距离
  const distanceX = targetX - startX;

  function animate(currentTime) {
    // 计算已经经过的时间
    const elapsedTime = currentTime - startTime;
    // 计算滚动位置
    const scrollX = easeInOut(elapsedTime, startX, distanceX, duration);
    // 设置滚动位置
    element.scrollLeft = scrollX;

    // 如果动画未结束，则继续请求下一帧动画
    if (elapsedTime < duration) {
      requestAnimationFrame(animate);
    }
  }

  // 开始动画
  requestAnimationFrame(animate);
}

// 线性缓动函数
/**
 * @param {number} t - 当前时间，通常以毫秒为单位，表示动画已经持续了多久。
 * @param {number} b - 起始值，即动画的初始状态。
 * @param {number} c - 变化量，即动画从起始值到目标值的总变化量。
 * @param {number} d - 持续时间，即动画的总持续时间。
 * @returns {number} - 返回当前时间下的动画值，用于在动画中应用。
 * */
function easeInOut(t, b, c, d) {
  t /= d / 2;
  if (t < 1) return (c / 2) * t * t + b; //Ax^2 +B 导函数在第一象限 为正 凹函数
  t--;
  return (-c / 2) * (t * (t - 2) - 1) + b;
}
